[TDR Generic表][Java SDK]扫描全表数据
1. 接口说明
扫描指定的表格中的数据。
2. 版本要求
无特殊要求,所有版本都提供了该接口。
3. 准备工作
参见准备工作文档,完成使用该接口前的准备工作,并创建TDR Generic表。
准备工作完成后,将会获得以下信息,这些信息在使用SDK时会被用到:
- 目录服务器地址列表
- 业务ID
- 业务访问密码
- 游戏区ID
- 数据表名
4. 示例代码
示例代码的基本执行过程:
- 创建客户端;
- 构建请求;
- 发送请求;
- 处理响应;
- 销毁客户端。
4.1. 同步调用示例代码
import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.GenericTableTraverser;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] arguments) {
// 1. 准备环境信息
// 1.1. 目录服务地址列表
List<String> dirList = new ArrayList<String>();
dirList.add("tcp://x.x.x.x:9999");
dirList.add("tcp://y.y.y.y:9999");
// 1.2. 业务ID
int appId = 1;
// 1.3. 业务密码
String appPassword = "****************";
// 1.4. 表格组ID
int tableGroupId = 1;
// 1.5. 表格名称
String tableName = "test";
// 2. 创建客户端
Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
try {
// 3. 构造根据部分Key字段值读取数据的请求
// 3.1. 创建1个扫描器
GenericTableTraverser traverser = client.getGenericTableTraverser(tableName);
// 3.2. 添加需要读取的Value字段
traverser.addFieldName("typeid");
traverser.addFieldName("Data");
traverser.addFieldName("uname");
// 3.3. 设置一批最多返回的数据条数,由于扫描返回的数据量通常较多,需要分批返回
traverser.setLoadOptions(100);
// 3.4. 设置总共最多返回的数据条数
traverser.setTotalLimit(10000);
// 4. 启动扫描器
Iterator<Record> iterator = traverser.start();
// 5. 循环从迭代器中获取数据,直到读完所有数据
while (iterator.hasNext()) {
Record result = iterator.next();
// TODO 在此添加处理返回数据的代码
}
} finally {
// 6. 销毁客户端对象
ClientFactory.destroyClient(client);
}
}
4.2. 异步调用示例代码
import com.tencent.tcaplus.client.Client;
import com.tencent.tcaplus.client.ClientFactory;
import com.tencent.tcaplus.client.GenericTableTraverser;
import com.tencent.tcaplus.client.Record;
import com.tencent.tcaplus.client.Request;
import com.tencent.tcaplus.client.Response;
import com.tencent.tdr.tcaplus_protocol_cs.TcaplusProtocolCsConstants;
import java.util.ArrayList;
import java.util.List;
public class Example {
public static void main(String[] arguments) {
// 1. 准备环境信息
// 1.1. 目录服务地址列表
List<String> dirList = new ArrayList<String>();
dirList.add("tcp://x.x.x.x:9999");
dirList.add("tcp://y.y.y.y:9999");
// 1.2. 业务ID
int appId = 1;
// 1.3. 业务密码
String appPassword = "****************";
// 1.4. 表格组ID
int tableGroupId = 1;
// 1.5. 表格名称
String tableName = "test";
// 2. 创建客户端
Client client = ClientFactory.createClient(appId, tableGroupId, appPassword, dirList);
try {
// 3. 构造根据部分Key字段值读取数据的请求
// 3.1. 创建1个扫描器
GenericTableTraverser traverser = client.getGenericTableTraverser(tableName);
// 3.2. 添加需要读取的Value字段
traverser.addFieldName("typeid");
traverser.addFieldName("Data");
traverser.addFieldName("uname");
// 3.3. 设置一批最多返回的数据条数,由于扫描返回的数据量通常较多,需要分批返回
traverser.setLoadOptions(100);
// 3.4. 设置总共最多返回的数据条数
traverser.setTotalLimit(10000);
CountDownLatch latch = new CountDownLatch(1);
// 4. 异步启动扫描器,并指定返回结果处理器
traverser.startAsync(new Future() {
@Override
public void onResponse(Response response) {
// 5. 处理结果
if (response.getResult() == 0) {
for (Record result : response.getRecordList()) {
// TODO 可在此处添加处理数据代码
}
}
if (traverser.isCompleted()) {
latch.countDown();
}
}
});
latch.await();
} finally {
// 6. 销毁客户端对象
ClientFactory.destroyClient(client);
}
}
5. 用户获取遍历器对象方法说明
注:如有未列出来的获取遍历器对象方法,即表示该方法在扫描数据的场景下是无效的。
方法签名 | 方法说明 |
---|---|
GenericTableTraverser getGenericTableTraverser(String tableName) |
创建扫描器对象,后续的扫描动作都通过该对象完成。tableName:目标表名,不能为null。 |
6. 遍历器对象方法说明
注:如有未列出来的GenericTableTraverser对象方法,即表示该方法在扫描数据的场景下是无效的。
方法签名 | 方法说明 |
---|---|
void addFieldName(String fieldName) |
添加需要查询的数据的Value字段的名称。fieldName:Value字段名,不能为null。 |
Iterator<Record> start() |
启动扫描器,并获取数据迭代器。 |
7. 数据迭代器中获取的数据对象对象方法说明
注:如有未列出来的Record对象方法,即表示该方法在扫描数据的场景下是无效的。
方法签名 | 方法说明 |
---|---|
int getVersion() |
获取数据的版本号。 |
int getValueCount() |
获取数据的Value字段的个数。 |
byte getValueByte(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
short getValueShort(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
int getValueInt(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
long getValueLong(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
float getValueFloat(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
double getValueDouble(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
String getValueString(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
byte[] getValueBlob(String fieldName) |
获取指定名称的Value字段的值。fieldName:字段名称,不可为null。 |
8. 常见问题
详见错误码含义和处理方法。
9. 其它参考文档
[TDR Generic表][C++ SDK]遍历表数据接口说明